<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//Ultima verificacion: 22-11-2014 ; 21-02-2015
class PlanEstudio extends CI_Controller {
	//Metodo constructor de la clase
	function __construct(){
		parent::__construct();
		
		//Cargamos el helper form para poder utilizar todas las funciones de el, como subir archivos.
		$this->load->helper('form');
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todos los planes de estudios activos o inactivos pero NO los borrados (-1)
	function consultar(){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1')){
			//Cargo el modelo donde estan los datos de los planes de estudios registrados para pedirle un listado con todos ellos
			$this->load->model('m_plan_estudio');
			
			//Busco todos los planes de estudios activos o inactivos, pero no los borrados.
			$listadoPlanesEstudios = $this->m_plan_estudio->buscar();
			
			//Le paso el listado de todos los planes de estudios a la vista para que los muestre en una tabla
			$datos['planesEstudios'] = $listadoPlanesEstudios;
			
			//Cargo la vista donde se muestra la tabla de planes de estudios y la guardo en una variable para pasarsela a la vista principal
			$datosPrincipal['vista'] = $this->load->view('v_planes_estudios', $datos, true);
			
			//Cargo la vista principal con los datos de la vista recien generada
			$this->load->view('v_sistema', $datosPrincipal);
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}	
	
	//Este metodo solo se puede llamar con ajax
	//Sirve para eliminar el plan de estudio pasado por la url
	function eliminar($idPlanEstudio=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1')){
			//Segunda comprobacion: Que idPlanEstudio pasado sea numerico y mayor que cero.
			if(is_numeric($idPlanEstudio) && $idPlanEstudio>0){
				//Cargo el modelo donde estan los datos de los planes de estudios registrados
				$this->load->model('m_plan_estudio');
				
				//Busco al plan de estudio que hay que eliminar
				$planEstudio = $this->m_plan_estudio->get($idPlanEstudio);
				
				//Tercera comprobacion: Que el plan de estudio pasado por la url sea existente
				if($planEstudio->num_rows() == 1){
					//Elimino al archivo del plan de estudio si es que tenia uno asignado
					if($planEstudio->row()->idArchivo != 0){
						//Cargo el modelo donde estan los datos de los archivos registrados
						$this->load->model('m_archivo');
						
						//Elimino al archivo del plan de estudio
						$respuesta = $this->m_archivo->eliminar($planEstudio->row()->idArchivo, $this->session->userdata('idUsuarioLog'));
					}
					
					//Elimino al plan de estudio pasado por la url
					$respuesta = $this->m_plan_estudio->eliminar($idPlanEstudio, $this->session->userdata('idUsuarioLog'));
					
					//Busco todos los planes de estudios activos o inactivos, pero no los borrados que quedaron
					$listadoPlanesEstudios = $this->m_plan_estudio->buscar();
					
					//Le paso el listado de todos los planes de estudios a la vista para que los muestre en una tabla
					$datos['planesEstudios'] = $listadoPlanesEstudios;
					
					//Cargo la vista donde se muestra la tabla de planes de estudios
					$this->load->view('v_planes_estudios', $datos);
				} else {
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					echo("No existe el registro seleccionado para borrar.");
				}
			} else {
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				echo("No se ha pasado los parametros necesarios para borrar un registro.");
			}			
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			echo("No tiene permiso para borrar un registro.");
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Abre la pantalla con el formulario para crear un plan de estudio nuevo
	function abrirPantallaCrear(){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1')){
			//Cargo la vista donde se muestra el formulario para crear un plan de estudio y la guardo en una variable para pasarsela a la vista principal
			$datosPrincipal['vista'] = $this->load->view('v_planes_estudios_crear',"", true);
			
			//Cargo la vista principal con los datos de la vista para crear un plan de estudio
			$this->load->view('v_sistema', $datosPrincipal);
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
		
	//Esto metodo no se puede llamar con ajax
	//Este metodo crea realmente el plan de estudio. La respuesta se muestra en un iframe dentro del formulario
	function crear(){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1')){	   
			//Segunda comprobacion: Que se haya pasado por post el nombre, si esta vigente y el estado del plan de estudio a crear.
			if($this->input->post('nombre',true) != "" && ($this->input->post('vigente',true) == '1' || $this->input->post('vigente',true) == '0') && ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){		
				
				//Cargo el modelo donde estan los datos de los archivos
				$this->load->model('m_archivo');
				
				//Detalles de las configuraciones del archivo a subir
				$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/planesEstudios";
				$config['allowed_types'] = 'gif|jpg|png|jpeg|doc|docx|xls|xlsx|pdf|ppt|xppt|pps';
				$config['max_size'] = '10000';
				$this->load->library('upload', $config);
				
				$ultimoIdInsertado = 0;
				$archivo = '';
				//Si no se subio el archivo hacer lo siguiente
				if (!$this->upload->do_upload('archivo')){
					$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones.';
				//Si se subio el archivo hacer lo siguiente
				}else{
					//Datos del archivo subido
					$upload_data = $this->upload->data();
					$archivo = $upload_data['file_name'];
					$extensionArchivo = $upload_data['file_ext'];
					
					//Mensaje que se va a mostrar
					$mensaje = 'Se ha subido el archivo correctamente.';
					
					// Determine Content Type
					switch ($upload_data['file_ext']) {
					  case ".pdf": $ctype="application/pdf"; break; 
					  case ".exe": $ctype="application/octet-stream"; break; 
					  case ".zip": $ctype="application/zip"; break; 
					  case ".doc": $ctype="application/msword"; break; 
					  case ".xls": $ctype="application/vnd.ms-excel"; break; 
					  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
					  case ".gif": $ctype="image/gif"; break; 
					  case ".png": $ctype="image/png"; break; 
					  case ".jpeg": 
					  case ".jpg": $ctype="image/jpg"; break; 
					  default: $ctype="application/force-download"; 
					}
					
					//Creamos el archivo en la base de datos
					$resultado = $this->m_archivo->crear(random_string('alnum',20).$upload_data['file_ext'], $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/planesEstudios", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
					$ultimoIdInsertado = $this->db->insert_id();
				}
				
				//Cargo el modelo donde estan los datos de los planes de estudios
				$this->load->model('m_plan_estudio');
				
				//Creamos el plan de estudio
				$resultado = $this->m_plan_estudio->crear($this->input->post('nombre',true), $ultimoIdInsertado, $this->input->post('vigente',true), $this->input->post('descripcion',true), $this->input->post('estado',true), $this->session->userdata('idUsuarioLog'));
				
				if($resultado == 1){
					echo("<script> alert('El plan de estudio: ".$this->input->post('nombre',true)." se ha creado correctamente. ".$mensaje."');</script>");
				}else{
					echo("<script> alert('El plan de estudio: ".$this->input->post('nombre',true)." no se ha creado. Ha habido un error.');</script>");
				}
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}		
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo abre la pantalla con los datos del plan de estudio pasado por la url
	function abrirPantallaModificar($idPlanEstudio=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1')){
			//Segunda comprobacion: Que idPlanEstudio pasado sea numerico y mayor que cero.
			if(is_numeric($idPlanEstudio) && $idPlanEstudio>0){
				//Cargo el modelo donde estan los datos de los planes de estudios
				$this->load->model('m_plan_estudio');
												
				//Busco al plan de estudio que hay que modificar
				$planEstudio = $this->m_plan_estudio->get($idPlanEstudio);
				
				//Tercera comprobacion: Que el plan de estudio pasado por la url sea existente
				if($planEstudio->num_rows() == 1){
					//Le paso el plan de estudio a modificar a la vista
					$datos['planEstudioSel'] = $planEstudio;
					
					//Busco al plan de estudio siguiente del que hay que modificar
					$idPlanEstudioSig = $this->m_plan_estudio->getContiguo($idPlanEstudio,1);
									
					//Le paso el plan de estudio siguiente al que hay que modificar a la vista
					$datos['idPlanEstudioSig'] = $idPlanEstudioSig;
					
					//Busco al plan de estudio anterior del que hay que modificar
					$idPlanEstudioAnt = $this->m_plan_estudio->getContiguo($idPlanEstudio,-1);
									
					//Le paso el plan de estudio anterior al que hay que modificar a la vista
					$datos['idPlanEstudioAnt'] = $idPlanEstudioAnt;
									
					//Cargo la vista donde se muestra el formulario para modificar un plan de estudio y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_planes_estudios_modificar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para modificar un plan de estudio
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo realmente modifica los datos de un plan de estudio
	function modificar($idPlanEstudio=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1')){	   
			//Segunda comprobacion: Que se haya pasado por post el nombre, si esta vigente y el estado del plan de estudio a modificar. 
			//Ademas que se haya pasado por la url el id del plan de estudio a modificar
			if(is_numeric($idPlanEstudio) && $idPlanEstudio>0 && $this->input->post('nombre',true) != "" && ($this->input->post('vigente',true) == '1' || $this->input->post('vigente',true) == '0') && ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){		
				//Cargo el modelo donde estan los datos de los planes de estudios
				$this->load->model('m_plan_estudio');
				
				//Busco al plan de estudio que hay que modificar
				$planEstudio = $this->m_plan_estudio->get($idPlanEstudio);
				
				//Tercera comprobacion: Que el plan de estudio pasado por la url sea existente
				if($planEstudio->num_rows() == 1){
					//Guardamos el id del archivo actual. Cero si no tiene asignado ninguno
					$idArchivoActual = $planEstudio->row()->idArchivo;
					
					//Resultado 0 quiere decir que nada se ha modificado
					$resultado = 0;
					
					//Cargo el modelo donde estan los datos de los archivos
					$this->load->model('m_archivo');
					
					//Detalles de las configuraciones del archivo a subir
					$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/planesEstudios";
					$config['allowed_types'] = 'gif|jpg|png|jpeg|doc|docx|xls|xlsx|pdf|ppt|xppt|pps';
					$config['max_size'] = '10000';
					$this->load->library('upload', $config);
					
					$archivo = '';
					//Si no se subio el archivo hacer lo siguiente
					if (!$this->upload->do_upload('archivo')){
						$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones.';
					//Si se subio el archivo hacer lo siguiente
					}else{
						//Datos del archivo subido
						$upload_data = $this->upload->data();
						$archivo = $upload_data['file_name'];
						$extensionArchivo = $upload_data['file_ext'];
						
						//Mensaje que se va a mostrar
						$mensaje = 'Se ha subido el archivo correctamente.';
						
						// Determine Content Type
						switch ($upload_data['file_ext']) {
						  case ".pdf": $ctype="application/pdf"; break; 
						  case ".exe": $ctype="application/octet-stream"; break; 
						  case ".zip": $ctype="application/zip"; break; 
						  case ".doc": $ctype="application/msword"; break; 
						  case ".xls": $ctype="application/vnd.ms-excel"; break; 
						  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
						  case ".gif": $ctype="image/gif"; break; 
						  case ".png": $ctype="image/png"; break; 
						  case ".jpeg": 
						  case ".jpg": $ctype="image/jpg"; break; 
						  default: $ctype="application/force-download"; 
						}
						
						//Si ya tenia archivo lo modificamos, si no tenia, creamos un nuevo registro en la base de datos
						$nuevoHash = random_string('alnum',20).$upload_data['file_ext'];
																		
						if($idArchivoActual != 0){
							//Modificamos el archivo en la base de datos
							$resultado += $this->m_archivo->modificar($idArchivoActual, $nuevoHash, $upload_data['file_name'], $upload_data['file_ext'], $ctype);
						}else{
							//Creamos el archivo en la base de datos
							$resultado += $this->m_archivo->crear($nuevoHash, $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/planesEstudios", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
							$idArchivoActual = $this->db->insert_id();
						}
					}
					
					//Modificamos el plan de estudio
					$resultado += $this->m_plan_estudio->modificar($idPlanEstudio, $idArchivoActual, $this->input->post('nombre',true), $this->input->post('vigente',true), $this->input->post('descripcion',true), $this->input->post('estado',true));
					
					if($archivo != '')	echo("<script> window.parent.actualizarArchivo('".base_url() .'archivo/hash/'.$nuevoHash."');</script>");
					
					if($resultado >= 1){
						echo("<script> alert('El plan de estudio: ".$this->input->post('nombre',true)." se ha modificado correctamente.');</script>");
					}else{
						echo("<script> alert('El plan de estudio: ".$this->input->post('nombre',true)." no se ha modificado. Ha habido un error o los datos permanecieron iguales.');</script>");
					}
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todos los planes de estudios vigentes. No se requieren permiso ya que todos pueden consultar los planes vigentes.
	function consultarVigentes(){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si'){
			//Cargo el modelo donde estan los datos de los planes de estudios registrados para pedirle un listado con todos ellos
			$this->load->model('m_plan_estudio');
			
			//Busco todos los planes de estudios vigenetes.
			$listadoPlanesEstudios = $this->m_plan_estudio->buscarActivos(" AND planestudio.vigente=1");
			
			//Le paso el listado de todos los planes de estudios vigentes y activos a la vista para que los muestre en una tabla
			$datos['planesEstudios'] = $listadoPlanesEstudios;
			
			//Cargo la vista donde se muestra la tabla de planes de estudios y la guardo en una variable para pasarsela a la vista principal
			$datosPrincipal['vista'] = $this->load->view('v_planes_estudios_vigentes', $datos, true);
			
			//Cargo la vista principal con los datos de la vista recien generada
			$this->load->view('v_sistema', $datosPrincipal);
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo abre la pantalla con los datos del plan de estudio pasado por la url. No se requieren permiso ya que todos pueden consultar los planes vigentes.
	function abrirPantallaVisualizar($idPlanEstudio=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si'){
			//Segunda comprobacion: Que idPlanEstudio pasado sea numerico y mayor que cero.
			if(is_numeric($idPlanEstudio) && $idPlanEstudio>0){
				//Cargo el modelo donde estan los datos de los planes de estudios
				$this->load->model('m_plan_estudio');
												
				//Busco al plan de estudio que hay que visualizar. Debe ser activo y vigente.
				$planEstudio = $this->m_plan_estudio->get($idPlanEstudio, " AND vigente=1 AND estado=1");
				
				//Tercera comprobacion: Que el plan de estudio pasado por la url sea existente
				if($planEstudio->num_rows() == 1){
					//Le paso el plan de estudio a visualizar a la vista
					$datos['planEstudioSel'] = $planEstudio;
					
					//Busco al plan de estudio siguiente del que hay que visualizar
					$idPlanEstudioSig = $this->m_plan_estudio->getVigenteContiguo($idPlanEstudio,1);
					
					//Le paso el plan de estudio siguiente al que hay que visualizar a la vista
					$datos['idPlanEstudioSig'] = $idPlanEstudioSig;
					
					//Busco al plan de estudio anterior del que hay que visualizar
					$idPlanEstudioAnt = $this->m_plan_estudio->getVigenteContiguo($idPlanEstudio,-1);
					
					//Le paso el plan de estudio anterior al que hay que visualizar a la vista
					$datos['idPlanEstudioAnt'] = $idPlanEstudioAnt;
					
					//Cargo la vista donde se muestra el formulario para visualizar un plan de estudio y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_planes_estudios_visualizar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para visualizar un plan de estudio
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El registro no existe.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para visualizar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
}